#![allow(unused_imports, non_snake_case, non_camel_case_types)]
use super::windows::*;
use super::*;

#[repr(C)]
pub struct IDWriteFontFaceVtbl {
	pub parent: IUnknownVtbl,
	pub GetType: unsafe extern "system" fn(This: *mut IDWriteFontFace) -> DWRITE_FONT_FACE_TYPE,
	pub GetFiles: unsafe extern "system" fn(This: *mut IDWriteFontFace, numberOfFiles: *mut UINT32, fontFiles: *mut *mut IDWriteFontFile) -> HRESULT,
	pub GetIndex: unsafe extern "system" fn(This: *mut IDWriteFontFace) -> UINT32,
	pub GetSimulations: unsafe extern "system" fn(This: *mut IDWriteFontFace) -> DWRITE_FONT_SIMULATIONS,
	pub IsSymbolFont: unsafe extern "system" fn(This: *mut IDWriteFontFace) -> BOOL,
	pub GetMetrics: unsafe extern "system" fn(This: *mut IDWriteFontFace, fontFaceMetrics: *mut DWRITE_FONT_METRICS) -> (),
	pub GetGlyphCount: unsafe extern "system" fn(This: *mut IDWriteFontFace) -> UINT16,
	pub GetDesignGlyphMetrics: unsafe extern "system" fn(This: *mut IDWriteFontFace, glyphIndices: *const UINT16, glyphCount: UINT32, glyphMetrics: *mut DWRITE_GLYPH_METRICS, isSideways: BOOL) -> HRESULT,
	pub GetGlyphIndices: unsafe extern "system" fn(This: *mut IDWriteFontFace, codePoints: *const UINT32, codePointCount: UINT32, glyphIndices: *mut UINT16) -> HRESULT,
	pub TryGetFontTable: unsafe extern "system" fn(This: *mut IDWriteFontFace, openTypeTableTag: UINT32, tableData: *mut *const c_void, tableSize: *mut UINT32, tableContext: *mut *mut c_void, exists: *mut BOOL) -> HRESULT,
	pub ReleaseFontTable: unsafe extern "system" fn(This: *mut IDWriteFontFace, tableContext: *mut c_void) -> HRESULT,
	pub GetGlyphRunOutline: unsafe extern "system" fn(This: *mut IDWriteFontFace, emSize: FLOAT, glyphIndices: *const UINT16, glyphAdvances: *const FLOAT, glyphOffsets: *const DWRITE_GLYPH_OFFSET, glyphCount: UINT32, isSideways: BOOL, isRightToLeft: BOOL, geometrySink: *mut IDWriteGeometrySink) -> HRESULT,
	pub GetRecommendedRenderingMode: unsafe extern "system" fn(This: *mut IDWriteFontFace, emSize: FLOAT, pixelsPerDip: FLOAT, measuringMode: DWRITE_MEASURING_MODE, renderingParams: *mut IDWriteRenderingParams, renderingMode: *mut DWRITE_RENDERING_MODE) -> HRESULT,
	pub GetGdiCompatibleMetrics: unsafe extern "system" fn(This: *mut IDWriteFontFace, emSize: FLOAT, pixelsPerDip: FLOAT, transform: *const DWRITE_MATRIX, fontFaceMetrics: *mut DWRITE_FONT_METRICS) -> HRESULT,
	pub GetGdiCompatibleGlyphMetrics: unsafe extern "system" fn(This: *mut IDWriteFontFace, enSize: FLOAT, pixelsPerDip: FLOAT, transform: *const DWRITE_MATRIX, useGdiNatrual: BOOL, glyphIndices: *const UINT16, glyphCount: UINT32, glyphMetrics: *mut DWRITE_GLYPH_METRICS, isSideways: BOOL) -> HRESULT,
}
#[repr(C)]
pub struct IDWriteFontFace {
	pub lpVtbl: *const IDWriteFontFaceVtbl,
}
impl IDWriteFontFace {
	#[inline]
	pub unsafe fn GetType(&self) -> DWRITE_FONT_FACE_TYPE {
		((*self.lpVtbl).GetType)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetFiles(&self, numberOfFiles: *mut UINT32, fontFiles: *mut *mut IDWriteFontFile) -> HRESULT {
		((*self.lpVtbl).GetFiles)(self as *const _ as *mut _, numberOfFiles, fontFiles)
	}
	#[inline]
	pub unsafe fn GetIndex(&self) -> UINT32 {
		((*self.lpVtbl).GetIndex)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetSimulations(&self) -> DWRITE_FONT_SIMULATIONS {
		((*self.lpVtbl).GetSimulations)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn IsSymbolFont(&self) -> BOOL {
		((*self.lpVtbl).IsSymbolFont)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetMetrics(&self, fontFaceMetrics: *mut DWRITE_FONT_METRICS) -> () {
		((*self.lpVtbl).GetMetrics)(self as *const _ as *mut _, fontFaceMetrics)
	}
	#[inline]
	pub unsafe fn GetGlyphCount(&self) -> UINT16 {
		((*self.lpVtbl).GetGlyphCount)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetDesignGlyphMetrics(&self, glyphIndices: *const UINT16, glyphCount: UINT32, glyphMetrics: *mut DWRITE_GLYPH_METRICS, isSideways: BOOL) -> HRESULT {
		((*self.lpVtbl).GetDesignGlyphMetrics)(self as *const _ as *mut _, glyphIndices, glyphCount, glyphMetrics, isSideways)
	}
	#[inline]
	pub unsafe fn GetGlyphIndices(&self, codePoints: *const UINT32, codePointCount: UINT32, glyphIndices: *mut UINT16) -> HRESULT {
		((*self.lpVtbl).GetGlyphIndices)(self as *const _ as *mut _, codePoints, codePointCount, glyphIndices)
	}
	#[inline]
	pub unsafe fn TryGetFontTable(&self, openTypeTableTag: UINT32, tableData: *mut *const c_void, tableSize: *mut UINT32, tableContext: *mut *mut c_void, exists: *mut BOOL) -> HRESULT {
		((*self.lpVtbl).TryGetFontTable)(self as *const _ as *mut _, openTypeTableTag, tableData, tableSize, tableContext, exists)
	}
	#[inline]
	pub unsafe fn ReleaseFontTable(&self, tableContext: *mut c_void) -> HRESULT {
		((*self.lpVtbl).ReleaseFontTable)(self as *const _ as *mut _, tableContext)
	}
	#[inline]
	pub unsafe fn GetGlyphRunOutline(&self, emSize: FLOAT, glyphIndices: *const UINT16, glyphAdvances: *const FLOAT, glyphOffsets: *const DWRITE_GLYPH_OFFSET, glyphCount: UINT32, isSideways: BOOL, isRightToLeft: BOOL, geometrySink: *mut IDWriteGeometrySink) -> HRESULT {
		((*self.lpVtbl).GetGlyphRunOutline)(self as *const _ as *mut _, emSize, glyphIndices, glyphAdvances, glyphOffsets, glyphCount, isSideways, isRightToLeft, geometrySink)
	}
	#[inline]
	pub unsafe fn GetRecommendedRenderingMode(&self, emSize: FLOAT, pixelsPerDip: FLOAT, measuringMode: DWRITE_MEASURING_MODE, renderingParams: *mut IDWriteRenderingParams, renderingMode: *mut DWRITE_RENDERING_MODE) -> HRESULT {
		((*self.lpVtbl).GetRecommendedRenderingMode)(self as *const _ as *mut _, emSize, pixelsPerDip, measuringMode, renderingParams, renderingMode)
	}
	#[inline]
	pub unsafe fn GetGdiCompatibleMetrics(&self, emSize: FLOAT, pixelsPerDip: FLOAT, transform: *const DWRITE_MATRIX, fontFaceMetrics: *mut DWRITE_FONT_METRICS) -> HRESULT {
		((*self.lpVtbl).GetGdiCompatibleMetrics)(self as *const _ as *mut _, emSize, pixelsPerDip, transform, fontFaceMetrics)
	}
	#[inline]
	pub unsafe fn GetGdiCompatibleGlyphMetrics(&self, enSize: FLOAT, pixelsPerDip: FLOAT, transform: *const DWRITE_MATRIX, useGdiNatrual: BOOL, glyphIndices: *const UINT16, glyphCount: UINT32, glyphMetrics: *mut DWRITE_GLYPH_METRICS, isSideways: BOOL) -> HRESULT {
		((*self.lpVtbl).GetGdiCompatibleGlyphMetrics)(self as *const _ as *mut _, enSize, pixelsPerDip, transform, useGdiNatrual, glyphIndices, glyphCount, glyphMetrics, isSideways)
	}
}
impl core::ops::Deref for IDWriteFontFace {
	type Target = IUnknown;
	#[inline]
	fn deref(&self) -> &IUnknown {
		unsafe { &*(self as *const IDWriteFontFace as *const IUnknown) }
	}
}
impl Interface for IDWriteFontFace {
	#[inline]
	fn uuidof() -> GUID {
		GUID { Data1: 0x5f49804d, Data2: 0x7024, Data3: 0x4d43, Data4: [0xbf, 0xa9, 0xd2, 0x59, 0x84, 0xf5, 0x38, 0x49] }
	}
}
